package com.css.openapi.BO;


import com.css.common.core.constant.FppzEnum;
import com.css.common.core.constant.ValidGroup;
import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import java.util.List;

/**
 * @description:
 * @Title: FpttInfoVO
 * @Author xlw
 * @Package com.invoice.tcc.pojo.vo
 * @Date 2024/9/26 13:55
 */
@Data
public class FpttInfoVO {

    /**
     * 商户号
     */
    @NotBlank(message = "merchantCode不能为空")
    private String merchantCode;

    /**
     * 票种
     * @see FppzEnum#getDm()
     */
    private String fppz = FppzEnum.FPPZ_DZPTFP.getDm();

    /**
     * 终端代码
     */
    @NotBlank(message = "terminalCode不能为空")
    private String terminalCode;

    /**
     * 商户订单号
     * 商户订单号与银商订单号至少存在一个，如均存在，以商户订单号为准，忽略银商订单号
     */
    private String merchantOrderId;

    /**
     * 银联交易号
     * 必须与原支付交易返回的订单号一致
     */
    @NotBlank(message = "originalOrderId不能为空")
    private String originalOrderId;

    /**
     * 销售方纳税人识别号
     */
    @NotBlank(message = "销售方纳税人识别号不能为空", groups = ValidGroup.GBXU.class)
    private String xsfnsrsbh;

    /**
     * （购买方）统一社会信用代码/纳税人识别号/身份证件号码
     */
    private String gmfnsrsbh;

    /**
     * (购买方)名称
     */
    @NotBlank(message = "gmfmc不能为空")
    private String gmfmc;

    /**
     * 购买方地址
     */
    private String gmfdz;

    /**
     * 购买方电话
     */
    private String gmfdh;

    /**
     * 购买方开户行
     */
    private String gmfkhh;

    /**
     * 购买方账号
     */
    private String gmfzh;

    /**
     * 备注
     */
    private String bz;

    /**
     * 购买方自然人标志
     * Y为自然人
     * N为非自然人
     */
    @NotBlank(message = "gmfzrrbz不能为空")
    @Pattern(regexp = "Y|N", message = "自然人标志不正确")
    private String gmfzrrbz;

    /**
     * 开票结果通知地址
     */
    @NotBlank(message = "callBackUrl不能为空")
    private String callBackUrl;

    /**
     * 订单明细
     */
    @Valid
    @NotEmpty(message = "ddmx不能为空", groups = ValidGroup.TCCHK.class)
    private List<DdmxVO> ddmx;

    /**
     * 停车场备注栏信息
     */
    private TccKzxxDTO tcckzxx;

    /**
     * 出行人信息，旅客运输适用
     */
    private List<PassengersDTO> passengers;
}
